<?php
return [

    /*
    |--------------------------------------------------------------------------
    | JWT 身份验证密钥
    |--------------------------------------------------------------------------
    |
    | 不要忘记在您的 .env 文件中设置此项，因为它将用于签名
    | 您的令牌。提供了一个辅助命令供您使用：
    | `php artisan jwt:secret`
    |
    | 注意：这将仅用于对称算法（HMAC），
    | 因为 RSA 和 ECDSA 使用的是私钥/公钥组合（见下文）。
    |
    */

    'secret' => env('JWT_SECRET'),

    /*
    |--------------------------------------------------------------------------
    | JWT 身份验证密钥
    |--------------------------------------------------------------------------
    |
    | 您正在使用的算法将决定您的令牌是使用随机字符串
    | （在 `JWT_SECRET` 中定义）签名，还是使用以下公钥和私钥。
    |
    | 对称算法：
    | HS256、HS384 和 HS512 将使用 `JWT_SECRET`。
    |
    | 非对称算法：
    | RS256、RS384 和 RS512 / ES256、ES384 和 ES512 将使用以下密钥。
    |
    */

    'keys' => [

        /*
        |--------------------------------------------------------------------------
        | 公钥
        |--------------------------------------------------------------------------
        |
        | 指向您的公钥的路径或资源。
        |
        | 例如：'file://path/to/public/key'
        |
        */

        'public' => env('JWT_PUBLIC_KEY'),

        /*
        |--------------------------------------------------------------------------
        | 私钥
        |--------------------------------------------------------------------------
        |
        | 指向您的私钥的路径或资源。
        |
        | 例如：'file://path/to/private/key'
        |
        */

        'private' => env('JWT_PRIVATE_KEY'),

        /*
        |--------------------------------------------------------------------------
        | 密码
        |--------------------------------------------------------------------------
        |
        | 私钥的密码。如果没有设置，则可以为 null。
        |
        */

        'passphrase' => env('JWT_PASSPHRASE'),

    ],

    /*
    |--------------------------------------------------------------------------
    | JWT 有效期
    |--------------------------------------------------------------------------
    |
    | 指定令牌有效的时长（以分钟为单位）。
    | 默认值为 1 小时。
    |
    | 您也可以将其设置为 null，以得到一个永不过期的令牌。
    | 有些人可能希望这种行为，例如移动应用。
    | 这并不特别推荐，因此请确保有适当的系统来撤销令牌（如有必要）。
    | 注意：如果将此设置为 null，则应从 'required_claims' 列表中移除 'exp' 元素。
    |
    */

    'ttl' => (int)env('JWT_TTL', 60),

    /*
    |--------------------------------------------------------------------------
    | 刷新有效期
    |--------------------------------------------------------------------------
    |
    | 指定可以在其中刷新令牌的时间长度（以分钟为单位）。
    | 即用户可以在原始令牌创建后的 2 周内刷新他们的令牌，
    | 然后必须重新身份验证。
    | 默认值为 2 周。
    |
    | 您还可以将其设置为 null，以获得无限的刷新时间。
    | 有些人可能会选择这种方式，而不是永不过期的令牌，例如移动应用。
    | 这并不特别推荐，因此请确保有适当的系统来撤销令牌（如有必要）。
    |
    */

    'refresh_ttl' => env('JWT_REFRESH_TTL', 20160),

    /*
    |--------------------------------------------------------------------------
    | JWT 哈希算法
    |--------------------------------------------------------------------------
    |
    | 指定将用于签名令牌的哈希算法。
    |
    */

    'algo' => env('JWT_ALGO', Tymon\JWTAuth\Providers\JWT\Provider::ALGO_HS256),

    /*
    |--------------------------------------------------------------------------
    | 必需声明
    |--------------------------------------------------------------------------
    |
    | 指定任何令牌中必须存在的必需声明。
    | 如果这些声明中的任何一个不在有效负载中，将抛出 TokenInvalidException。
    |
    */

    'required_claims' => [
        'iss',
        'iat',
        'exp',
        'nbf',
        'sub',
        'jti',
    ],

    /*
    |--------------------------------------------------------------------------
    | 持久声明
    |--------------------------------------------------------------------------
    |
    | 指定在刷新令牌时要持久化的声明键。
    | `sub` 和 `iat` 将自动被持久化，除此之外带有这些声明。
    |
    | 注意：如果某个声明不存在，则将被忽略。
    |
    */

    'persistent_claims' => [
        // 'foo',
        // 'bar',
    ],

    /*
    |--------------------------------------------------------------------------
    | 锁定主题
    |--------------------------------------------------------------------------
    |
    | 这将决定是否自动向令牌添加 `prv` 声明。
    | 这样做的目的是确保如果您有多个身份验证模型，例如
    | `App\User` 和 `App\OtherPerson`，则应防止一个身份验证请求冒充另一个请求，
    | 如果两个令牌恰好在这两个不同模型中具有相同的 ID。
    |
    | 在特定情况下，您可能希望禁用此行为
    | 例如，如果您只有一个身份验证模型，则可以节省一些令牌大小。
    |
    */

    'lock_subject' => true,

    /*
    |--------------------------------------------------------------------------
    | 余地
    |--------------------------------------------------------------------------
    |
    | 此属性给 jwt 时间戳声明留出了一些“余地”。
    | 这意味着如果您的任何服务器上存在不可避免的轻微时钟偏差，
    | 那么这将为您提供一定程度的缓冲。
    |
    | 这适用于声明 `iat`、`nbf` 和 `exp`。
    |
    | 以秒为单位指定 - 仅在您知道需要时。
    |
    */

    'leeway' => env('JWT_LEEWAY', 0),

    /*
    |--------------------------------------------------------------------------
    | 黑名单启用
    |--------------------------------------------------------------------------
    |
    | 为了使令牌失效，您必须启用黑名单。
    | 如果您不想或不需要此功能，请将其设置为 false。
    |
    */

    'blacklist_enabled' => env('JWT_BLACKLIST_ENABLED', true),

    /*
    | -------------------------------------------------------------------------
    | 黑名单宽限期
    | -------------------------------------------------------------------------
    |
    | 当使用相同 JWT 进行多个并发请求时，
    | 由于每次请求都重新生成令牌，可能会导致其中一些请求失败。
    |
    | 设置宽限期（以秒为单位）以防止并行请求失败。
    |
    */

    'blacklist_grace_period' => env('JWT_BLACKLIST_GRACE_PERIOD', 0),

    /*
    |--------------------------------------------------------------------------
    | Cookies 加密
    |--------------------------------------------------------------------------
    |
    | 默认情况下，Laravel为了安全原因会加密 cookies。
    | 如果您决定不解密 cookies，您将不得不配置 Laravel
    | 通过将其名称添加到中间件 "EncryptCookies" 中提供的 $except
    | 数组中，以不加密您的 cookie 令牌。
    | 详情请参见 https://laravel.com/docs/master/responses#cookies-and-encryption
    | .
    |
    | 如果您想解密 cookies，请将其设置为 true。
    |
    */

    'decrypt_cookies' => false,

    /*
    |--------------------------------------------------------------------------
    | 提供者
    |--------------------------------------------------------------------------
    |
    | 指定在整个包中使用的各种提供者。
    |
    */

    'providers' => [

        /*
        |--------------------------------------------------------------------------
        | JWT 提供者
        |--------------------------------------------------------------------------
        |
        | 指定用于创建和解码令牌的提供者。
        |
        */

        'jwt' => Tymon\JWTAuth\Providers\JWT\Lcobucci::class,

        /*
        |--------------------------------------------------------------------------
        | 身份验证提供者
        |--------------------------------------------------------------------------
        |
        | 指定用于身份验证用户的提供者。
        |
        */

        'auth' => Tymon\JWTAuth\Providers\Auth\Illuminate::class,

        /*
        |--------------------------------------------------------------------------
        | 存储提供者
        |--------------------------------------------------------------------------
        |
        | 指定用于在黑名单中存储令牌的提供者。
        |
        */

        'storage' => Tymon\JWTAuth\Providers\Storage\Illuminate::class,

    ],
];

